/* 
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
$(document).ready(function() {
    user.init();
});

var user = (function() {
    
    function addUser() {
        var u = $('#userName').val(),
            p = $('#password').val(),
            e = $('#repassword').val(),
            r = $('input:radio[name=userRole]:checked').val();

        $('#userInput .form-group').removeClass('has-error');
        $('#userAlert').hide().html('');    
        if(!u) {
            $('#userName').parents('.form-group').addClass('has-error');
            $('#addUser').find('i.fa').attr('class', 'fa fa-plus-circle');
            return false;
        }
        if(!p) {
            $('#password').parents('.form-group').addClass('has-error');
            $('#addUser').find('i.fa').attr('class', 'fa fa-plus-circle');
            return false;
        }
        if(e != p) {
            $('#repassword').parents('.form-group').addClass('has-error');
            $('#addUser').find('i.fa').attr('class', 'fa fa-plus-circle');
            return false;
        }
        
        $.post('/user/ajax-add-new-user', {
            u: u,
            p: p,
            r: r
        }, function(resp) {
            if (resp.err == 0) {
                var data = resp.data,
                    html = '<tr>\
                                <td class="name">\
                                    <a data-title="Tên user" href="#" class="user_name">\
                                    ' + u + '\
                                    </a>\
                                </td>\
                                <td>\
                                    <small>' + (r == 1 ? 'Admin' : 'Người dùng') + '</small>\
                                </td>\
                                <td class="text-center">\
                                    <a href="#" class="text-primary pull-left" onclick="return user.editUser(this, \'' + data.id + '\')"><i class="fa fa-edit"></i></a>\
                                    <a href="#" class="text-danger pull-right" onclick="return user.deleteUser(this, \'' + data.id + '\')"><i class="fa fa-trash-o"></i></a>\
                                </td>\
                            </tr>';
                $('#listUser').find('tbody').prepend(html);
                $('#userName').html('');
                $('#password').html('');
            } else {
                $('#userAlert').show().html(resp.msg);
            }
            $('#addUser').find('i.fa').attr('class', 'fa fa-plus-circle');
        }, 'json');
    }
    
    function initHandler() {
        $('#addUser').click(function() {
            $(this).find('i.fa').attr('class', 'fa fa-spinner fa-spin');
            addUser();
            return false;
        });
    }
    
    function initUserAccessHandler() {
        $('#lstAccess input.parentCheck').click(function() {
            var chk = $(this),
                tr = $(this).parents('tr'),
                ischk = chk.prop('checked');
            while(true) {
                tr = tr.next();
                if(!tr) {
                    break;
                }
                
                chk = tr.find('input[type=checkbox]');
                if(!chk.hasClass('childCheck'))
                    break;
                chk.prop('checked', ischk);
            }
        });
        
        $('#lstAccess input.childCheck').click(function() {
            var chk = $(this),
                tr = $(this).parents('tr'),
                ischk = chk.prop('checked');
            if(!ischk)    
                return;
            
            while(true) {
                tr = tr.prev();
                if(!tr) {
                    break;
                }
                
                chk = tr.find('input[type=checkbox]');
                if(ischk && chk.hasClass('parentCheck')) {
                    chk.prop('checked', ischk);
                    break;
                }
            }
        });
    }
    
    return {
        init: function() {
            initHandler();
        },
        
        deleteUser: function(obj, id) {
            var tr = $(obj).parents('tr'),
                name = tr.find('td.name').find('a').html();
            
            showConfirm({
                msg: 'Bạn có chắc chắn muốn xoá tài khoản <span class="text-danger">"' + name + '"</span> không?',
                title: 'Xoá tài khoản',
                noBt: 'Đóng',
                yesBt: 'Đồng ý xoá',
                onYes: function() { 
                    $.post('/user/ajax-delete-user', {id: id}, function(resp) {
                        if(resp.err == 0) {
                            tr.remove();
                            hideConfirm();
                        }
                    }, 'json');
                }
            });
        },
        
        editUser: function(obj, id) {
            var tr = $(obj).parents('tr'),
                title = tr.find('.name').html(),
                role = tr.find('.role').find('small').html().toLowerCase() == "admin" ? 1 : 0,
                html = '<form>\
                            <div class="form-group">\
                                <label for="editUser">Tên tài khoản:</label>\
                                <p class="form-control-static text-success">' + title + '</p>\
                            </div>\
                            <div class="form-group">\
                                <label for="editPass">Mật khẩu:</label>\
                                <input autocomplete="off" type="password" class="form-control" id="editPass" placeholder="Mật khẩu" value="">\
                            </div>\
                            <div class="form-group">\
                                <label for="editRePass">Nhập lạiMật khẩu:</label>\
                                <input autocomplete="off" type="password" class="form-control" id="editRePass" placeholder="Nhập lại Mật khẩu" value="">\
                            </div>\
                            <div class="form-group">\
                                <label for="editRole">Quyền:</label>\
                                <label class="radio-inline">\
                                    <input type="radio" ' + (role == 0 ? 'checked="checked"' : '') + ' value="0" name="editRole"> Người dùng\
                                </label>\
                                <label class="radio-inline">\
                                    <input type="radio" ' + (role == 1 ? 'checked="checked"' : '') + ' value="1" name="editRole"> Admin\
                                </label>\
                            </div>\
                            <p id="editUserHelpBlock" class="text-danger" style="display:none;"></p>\
                        </form>';
            showConfirm({
                title: 'Cập nhật tài khoản',
                msg: html,
                noBt: 'Đóng',
                yesBt: 'Cập nhật',
                onYes: function(uid) {
                    var ePass = $('#editPass').val(),
                        rePass = $('#editRePass').val(),
                        eRole = $('input:radio[name=editRole]:checked').val();
                    
                    $('#editUserHelpBlock').html('').hide();
                    if(ePass && ePass.length < 3) {
                        $('#editUserHelpBlock').show().html('Mật khẩu không hợp lệ.');
                        return false;
                    }
                    if(rePass != ePass) {
                        $('#editUserHelpBlock').show().html('Nhập lại Mật khẩu không khớp.');
                        return false;
                    }
                    
                    $.post('/user/ajax-edit-user', {
                        id: uid,
                        p: ePass,
                        r: eRole
                    }, function(resp) {
                        if(resp.err == 0) {
                            tr.find('.role').find('small').html(eRole == "0" ? "Người dùng" : "Admin");
                            hideConfirm();
                        } else {
                            $('#editUserHelpBlock').show().html(resp.msg);
                        }
                    }, 'json');
                    return false;
                },
                param: id
            });
        },
        
        editRole: function(obj, id) {
            var tr = $(obj).parents('tr'),
                name = tr.find('.name').html(),
                html = '<div id="userPermisList"></div>';
            showConfirm({
                title: 'Tài khoản: <span class="text-danger">' + name + '</span>',
                msg: html,
                afterShow: function() {
                    $.post('/user/ajax-get-access', {id: id}, function(resp) {
                        if(resp.err == 0 && resp.data) {
                            $('#userPermisList').html(resp.data);
                            initUserAccessHandler();
                        }
                    }, 'json');
                },
                onYes: function() {
                    var ePermiss = $('#userPermisList input:checkbox:checked');
                    var per = [];
                    $.each(ePermiss, function(i, item) {
                        per.push($(item).val());
                    });

                    $.post('/user/ajax-update-access', {
                        id: id,
                        permis: per.join(',')
                    }, function(resp) {
                        if(resp.err == 0) {
                            hideConfirm(); 
                       } else 
                            $('#editHelpBlock').html(resp.msg);
                    }, 'json');
                }
            });
        }
    };
})();